package com.bms.task;

import com.bms.entity.Activity;
import com.bms.service.ActivityService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

@Component
@Slf4j
public class QuartzTask {

    @Autowired
    private ActivityService activityService;

    // 使用@Async注解表明该方法将在异步线程中执行
    // 使用@Scheduled注解定义一个定时任务，按照cron表达式设定的时间间隔执行
    // 该方法用于每天凌晨0点10分自动更新活动的状态为已结束，如果活动已经结束
    @Async
    @Scheduled(cron = "0 10 0 * * ?")
    public void updateActivityStatus() {
        // 获取当前时间作为 Date 对象
        Date currentTime = new Date();
        // 记录定时任务开始执行的日志
        log.info("执行定时任务(活动状态自动结束)，每天0点10分执行");
        // 获取所有未结束的活动列表
        List<Activity> list = activityService.getActivitiesSelectList();
        // 遍历活动列表
        for (Activity activity : list) {
            // 如果活动已结束
            if (activity.getEndTime().before(currentTime)) {
                // 更新活动状态为“已结束”
                activity.setStatus(2);
                // 保存更新后的活动
                activityService.updateActivityStatus(activity);
            }
        }
        // 记录定时任务完成的日志，包括当前时间
        log.info("活动状态自动结束，当前时间：" + LocalDateTime.now());
    }

    public static void main(String[] args) {
        Date currentTime = new Date();  // 获取当前时间作为 Date 对象

        try {
            // 使用 SimpleDateFormat 指定日期格式
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date startDate = sdf.parse("2024-11-05 10:00:00");

            // 判断 startDate 是否在当前时间之前
            boolean b = startDate.before(currentTime);
            log.info("aaaaa: " + b);
        } catch (Exception e) {
            log.error("日期解析失败", e);
        }
    }
}
